package day0401;

import java.util.HashMap;
import java.util.Scanner;

public class DataClass5 {
    /**
     * 5.数据分类
     * <p>
     * 对一个数据 a 进行分类，分类方法为：此数据 a（四个字节大小）的四个字节相加对一个给定的值 b 取模，如果得到的结果小于一个给定的值 c，则数据 a 为有效类型，其类型为取模的值；如果得到的结果大于或者等于 c，则数据 a 为无效类型。
     * <p>
     * 比如一个数据 a=0x01010101，b=3，按照分类方法计算（0x01+0x01+0x01+0x01）%3=1，所以如果 c=2，则此 a 为有效类型，其类型为 1，如果 c=1，则此 a 为无效类型；
     * <p>
     * 又比如一个数据 a=0x01010103，b=3，按照分类方法计算（0x01+0x01+0x01+0x03）%3=0，所以如果 c=2，则此 a 为有效类型，其类型为 0，如果 c=0，则此 a 为无效类型。
     * <p>
     * 输入 12 个数据，第一个数据为 c，第二个数据为 b，剩余 10 个数据为需要分类的数据，请找到有效类型中包含数据最多的类型，并输出该类型含有多少个数据。
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] str = sc.nextLine().split(" ");
        sc.close();
        int c = Integer.parseInt(str[0]);
        int b = Integer.parseInt(str[1]);
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int i = 2; i < str.length; i++) {
            int num = Integer.parseInt(str[i]);
            int sum = getSum(num);
            int result = sum % b;
            if (result < c) {
                map.put(result, map.getOrDefault(result, 0) + 1);
            }
        }
        Integer value = map.entrySet().stream().sorted((o1, o2) -> o2.getValue() - o1.getValue())
                .findFirst().get().getValue();
        System.out.println(value);
    }

    private static int getSum(int num) {
        // 转为二进制数据
        String binary = Integer.toBinaryString(num);
        int sum = 0;
        while (binary.length() > 8) {
            String temp = binary.substring(binary.length() - 8);
            sum += Integer.parseInt(temp);
            binary = binary.substring(0, binary.length() - 8);
        }
        sum += Integer.parseInt(binary);
        return sum;
    }
}
